package jp.gr.java_conf.mahny.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Date、SimpleDateFormatを合わせたユーティリティ 書式文字列の指定ミスを防ぐ<br>
 * 書式を増やしたい場合は、列挙要素を増やす
 * <dl>
 * <dt>使い方</dt>
 * <dd>DateUtils.YYYYMMDD_HHMMSS.toString() → "2011/06/30 12:34:56"</dd>
 * </dl>
 * 
 * @author mahny
 * 
 */
public enum DateUtils {
	/**
	 * 日付書式 : yyyyMMddHHmmss
	 */
	YYYYMMDD_HHMMSS("yyyyMMddHHmmss"),
	/**
	 * 日付書式 : yyyyMMddHHmmssSSS
	 */
	YYYYMMDD_HHMMSSSSS("yyyyMMddHHmmssSSS"),

	/**
	 * 日付書式 : yyyy/MM/dd HH:mm:ss
	 */
	YYYYMMDD_HHMMSS_DELIMIT("yyyy/MM/dd HH:mm:ss"),
	/**
	 * 日付書式 : yyyy/MM/dd HH:mm:ss,SSS
	 */
	YYYYMMDD_HHMMSSSSS_DELIMIT("yyyy/MM/dd HH:mm:ss,SSS"), ;

	private String formatString = null;

	private DateUtils(String formatStr) {
		this.formatString = formatStr;
	}

	/**
	 * 日付書式文字列を返す
	 * 
	 * @return 書式文字列
	 */
	public String toString() {
		return formatString;
	}

	/**
	 * 指定した日付を整形する
	 * 
	 * @param date
	 *            指定日付
	 * @return 整形された文字列
	 */
	public String getFormatString(Date date) {
		SimpleDateFormat sdf = new SimpleDateFormat(formatString);
		return sdf.format(date);
	}

	/**
	 * 指定した日付を整形する
	 * 
	 * @param calendar
	 *            指定日付
	 * @return 整形された文字列
	 */
	public String getFormatString(Calendar calendar) {
		return getFormatString(calendar.getTime());
	}

	/**
	 * 現在時刻で整形する
	 * 
	 * @return 整形された文字列
	 */
	public String getFormatString() {
		return getFormatString(new Date());
	}
}
